//package com.utils.spring.config;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Properties;
//
//import javax.sql.DataSource;
//
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.mybatis.spring.SqlSessionFactoryBean;
//import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.env.Environment;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.core.io.support.ResourcePatternResolver;
//import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
//import org.springframework.core.type.classreading.MetadataReader;
//import org.springframework.core.type.classreading.MetadataReaderFactory;
//import org.springframework.util.ClassUtils;
//
///**
// * mybtis实现正则通配符扫描java bean包
// * https://blog.csdn.net/zjcjava/article/details/71403319?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
// */
//@Configuration
//public class MybatisConfig {
//
//	@Autowired
//	private Environment env;
//
//	static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
//
//	public static String setTypeAliasesPackage(String typeAliasesPackage) {
//		ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
//		MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
//		typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
//				+ ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/" + DEFAULT_RESOURCE_PATTERN;
//		try {
//			List<String> result = new ArrayList<String>();
//			Resource[] resources = resolver.getResources(typeAliasesPackage);
//			if (resources != null && resources.length > 0) {
//				MetadataReader metadataReader = null;
//				for (Resource resource : resources) {
//					if (resource.isReadable()) {
//						metadataReader = metadataReaderFactory.getMetadataReader(resource);
//						try {
//							// System.out.println(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
//							result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage()
//									.getName());
//						} catch (ClassNotFoundException e) {
//							e.printStackTrace();
//						}
//					}
//				}
//			}
//			if (result.size() > 0) {
//				HashSet<String> h = new HashSet<String>(result);
//				result.clear();
//				result.addAll(h);
//				typeAliasesPackage = String.join(",", (String[]) result.toArray(new String[0]));
//				System.out.println(typeAliasesPackage);
//			} else {
//				throw new RuntimeException(
//						"mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		return typeAliasesPackage;
//	}
//
//	@Bean
//	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
//		System.out.println(">>>>>>>>>>>配置[typeAliasesPackage,mapperLocations]START>>>>>>>>>>>>>>");
//		String typeAliasesPackage = env.getProperty("mybatis.type-aliases-package");
//		String mapperLocations = env.getProperty("mybatis.mapper-locations");
//		typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
//
//		final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
//		sessionFactory.setDataSource(dataSource);
//		sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
//		sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
//		System.out.println(">>>>>>>>>>>配置[typeAliasesPackage,mapperLocations]END>>>>>>>>>>>>>>");
//		return sessionFactory.getObject();
//	}
//
//	public ConfigurationCustomizer configurationCustomizer() {
//
//		return new ConfigurationCustomizer() {
//
//			@Override
//			public void customize(org.apache.ibatis.session.Configuration arg0) {
//				arg0.setMapUnderscoreToCamelCase(true);// 驼峰命名映射
//			}
//		};
//	}
//}
